package com.zrrd.mybatis_02.mapper;

import com.zrrd.mybatis_02.entity.Card;
import com.zrrd.mybatis_02.entity.Person;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * @author WanJl
 * @version 1.0
 * @title OneToOneMapper
 * @description 一对一查询 注解方式 映射Mapper
 * @create 2024/10/17
 */
public interface OneToOneMapper {
    /**
     * 查询身份证信息，包括身份证所属的人(Person)的信息
     * @return
     */
    @Select("SELECT * FROM card") //查询身份证信息
    /*
        @Results注解，相当于XXXMapper配置文件中的<resultMap>标签，这个注解中可以有多个@Result注解
        <resultMap id="xxx" type="xxx">
            <id column="id" property="id"/> 映射主键id的关系
            <result column="yyy" property="yyy"/> 映射主键以外的关系
        </resultMap>
     */
    @Results({
            @Result(column = "id",property = "id"),
            @Result(column = "number",property = "number"),
            @Result(column = "pid", //数据库中card表中的pid字段
                    property = "person", //Card类中Person类型的person变量
                    javaType= Person.class,//这个person变量的类型是Person类型
                    //one 是一对一关联的固定写法
                    //@One注解，是指一对【一】连接的时候使用的注解
                    //@One注解里面的select属性：要完成一对一连接，需要指定哪一个mapper接口中的哪一个抽象方法。
                    //确定连接的是谁，如果是Person，那么就得是PersonMapper接口的全名以及接口中的抽象方法
                    one = @One(select = "com.zrrd.mybatis_02.mapper.PersonMapper.getPersonById"))
    })
    List<Card> selectAll();
}
